home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C++ für Kids
/
C++ for kids.iso
/
Buch
/
hangx.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1999-01-30
|
5KB
|
180 lines
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "hangy.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
const String Datei = "c:\\cpp\\buch\\Hangman.txt";
String RateText, Geraten;
int OK, Nr, Laenge, Max;
bool Fertig;
TStringList *Liste;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SetZero (void)
{
Geraten = "";
Nr = 0;
OK = 0;
Fertig = false;
Image1->Canvas->Brush->Color = clGray;
Image1->Canvas->Rectangle(0,0,140,200);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DrawHangMan (void)
{
Image1->Canvas->Pen->Width = 3;
Image1->Canvas->Brush->Color = clSilver;
switch (Nr)
{
case 1:
Image1->Canvas->MoveTo (30,10);
Image1->Canvas->LineTo (30,200);
break;
case 2:
Image1->Canvas->MoveTo (30,10);
Image1->Canvas->LineTo (95,10);
break;
case 3:
Image1->Canvas->MoveTo (95,10);
Image1->Canvas->LineTo (95,30);
break;
case 4:
Image1->Canvas->Brush->Color = clRed;
Image1->Canvas->Ellipse (80,30,110,65);
break;
case 5:
Image1->Canvas->Ellipse (80,65,110,130);
break;
case 6:
Image1->Canvas->MoveTo (90,130);
Image1->Canvas->LineTo (90,170);
break;
case 7:
Image1->Canvas->MoveTo (100,130);
Image1->Canvas->LineTo (100,170);
break;
case 8:
Image1->Canvas->Ellipse (75,165,95,175);
break;
case 9:
Image1->Canvas->Ellipse (95,165,115,175);
break;
case 10:
Image1->Canvas->Brush->Color = clAqua;
Image1->Canvas->Ellipse (80,30,110,65);
Image1->Canvas->Brush->Color = clYellow;
Image1->Canvas->Ellipse (86,38,95,48);
Image1->Canvas->Ellipse (95,38,104,48);
Image1->Canvas->Arc (86,54,104,58,104,56,86,56);
break;
case 11:
Image1->Canvas->Brush->Color = clFuchsia;
Image1->Canvas->Ellipse (80,30,110,65);
Image1->Canvas->Brush->Color = clLime;
Image1->Canvas->Ellipse (86,38,95,48);
Image1->Canvas->Ellipse (95,38,104,48);
Image1->Canvas->Arc (86,52,104,58,86,55,104,55);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize ();
Liste = new TStringList;
SetZero ();
try
{
Liste->LoadFromFile (Datei);
Max = Liste->Count;
}
catch (...)
{
Panel1->Caption = "Ohne Worte!";
Max = 0;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewButtonClick(TObject *Sender)
{
SetZero ();
if (Max > 0) RateText = UpperCase(Liste->Strings[random(Max)]);
else RateText = UpperCase("Zehplusplus");
Laenge = RateText.Length();
for (int i=0; i<Laenge; i++)
{
Geraten = Geraten + "?";
}
Panel1->Caption = Geraten;
Label1->Caption = "Buchstaben eintippen!";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReadyButtonClick(TObject *Sender)
{
Nr = 0;
while (Nr < 11) {Nr++; DrawHangMan ();}
Panel1->Caption = RateText;
if (RateText.IsEmpty())
Label1->Caption = "Da ist kein Wort";
else
Label1->Caption = "ist das Wort";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
String Taste = UpperCase(Key);
bool Enthalten = false;
if (!Fertig)
{
// Jeden Buchstaben einzeln ⁿberprⁿfen
for (int i=1; i<=Laenge; i++)
{
if (Taste == RateText.SubString(i,1))
{
if (Taste != Geraten.SubString(i,1))
{
OK++;
Geraten[i] = Key;
Geraten = UpperCase(Geraten);
}
Enthalten = true;
}
}
// Wenn Key enthalten, anzeigen
if (Enthalten)
Panel1->Caption = Geraten;
// sonst Hangman weiterzeichnen
else
{
Nr++;
if (Nr < 11) DrawHangMan ();
}
// Wenn alle Buchstaben geraten, OK
if ((OK >= Laenge) && (Nr < 10))
{
if (RateText.IsEmpty())
Label1->Caption = "Klick auf NEU!";
else
Label1->Caption = "OK";
SetZero ();
Fertig = true;
}
// Wenn Hangman vollstΣndig, TOT
else if ((Nr >= 10) && (!Fertig))
{
Panel1->Caption = RateText;
Label1->Caption = "TOT";
}
}
}
//---------------------------------------------------------------------------